
#include <Arduino.h>
//注意：指纹ZW101的VCC需要单独供电，如用串口工具，不能用arduino板子供电.
#include <Arduino.h> 
//注意：指纹ZW101的VCC需要单独供电，如用串口工具，不能用arduino板子供电.
#include <SoftwareSerial.h> 
#define HLK_DEBUG //打开日志打印

// 定义指纹模组的UART引脚
#define FINGERPRINT_RX 5
#define FINGERPRINT_TX 6



// 定义指令包格式
const uint8_t HEADER_HIGH = 0xEF;
const uint8_t HEADER_LOW = 0x01;
const uint32_t DEVICE_ADDRESS = 0xFFFFFFFF;

// 定义指令码
const uint8_t CMD_GET_IMAGE = 0x01;  // 获取图像
const uint8_t CMD_GEN_CHAR = 0x02;   // 生成特征
const uint8_t CMD_MATCH = 0x03;   // 精确比对指纹
const uint8_t CMD_SEARCH = 0x04;   // 搜索指纹
const uint8_t CMD_REG_MODEL = 0x05;  // 合并特征
const uint8_t CMD_STORE_CHAR = 0x06; // 存储模板
const uint8_t CMD_CLEAR_LIB = 0x0D;   // 清空指纹库
const uint8_t CMD_READ_SYSPARA = 0x0F; // 读模组基本参数



// 定义模板存储位置
const uint16_t TEMPLATE_ID = 0;


// 函数声明
void printHex(uint8_t* data, uint8_t len) ;
void initfingerprint() ;
void command_use(void);
bool run_command(void);
int read_FP_info(void);
int register_FP(void);
int search_FP(void);
int clear_FP_all_lib(void);
void send_cmd(uint8_t cmd);
void send_cmd2(uint8_t cmd, uint8_t param1 ) ;
void sendCommand(uint8_t cmd, uint8_t param1, uint16_t param2);
void sendCommand1(uint8_t cmd, uint8_t param1, uint16_t param2, uint16_t param3) ;
bool receiveResponse() ;
void printResponse(uint8_t *response, uint8_t length);
void updatefingerprint();